#ifndef USART_H
#define USART_H

#include <stm32f4xx.h>
#include <stdio.h>
#include <stdlib.h>


extern volatile int8_t g_usart1_rx_buf[32];  // 用于接收串口1的数据
extern volatile uint8_t g_usart1_rx_cnt;    // 串口1接收到的数据大小
extern volatile uint8_t g_usart1_rx_end;  // 用于串口1标明一条数据结束


extern int fputc(int ch, FILE *f);


void _sys_exit(int return_code);


/**
 @brief 初始化串口1
 @param baud: 波特率,串口传输速度
*/
extern void usart1_init(uint32_t baud);


/**
 @brief 初始化串口2,用于蓝牙
 @param baud: 波特率,串口传输速度
*/
extern void usart2_init(uint32_t baud);


/**
 @brief 初始化串口3,用于wifi连接
 @param baud: 波特率,串口传输速度
*/
extern void usart3_init(uint32_t baud);


/**
 @brief 串口1中断处理函数,用于串口打印
*/
extern void USART1_IRQHandler(void);


/**
 @brief 串口2中断处理函数,用于从串口2获取数据
*/
extern void USART2_IRQHandler(void);


/**
 @brief 串口3中断处理函数,用于从串口3获取数据
*/
extern void USART3_IRQHandler(void);


/**
 @brief 向串口2发送字符串
 @param str: 字符串
*/
extern void usart2_send_str(char *str);


/**
 @brief 向串口3发送字符串
 @param str: 字符串
*/
extern void usart3_send_str(char *str);


/**
 @brief 向串口3发送字节数组
 @param buf: 字节数组
 @param len: 数组长度
*/
extern void usart3_send_bytes(uint8_t *buf,uint32_t len);


extern void usart3_test(void);


#endif  // USART_MOUDLE_H
